#!/bin/sh
#
# Copyright (c) 2008-2017, Toshiba (Australia) Pty. Limited
# All rights reserved.
#
#pragma ident   "@(#)net_estbw 7.90    2017/10/19 TAP"
###########
##
## Printer interface program to send print files to an estbw printer
## using the LPD (RFC 1179) protocol.
##
###########
#
# Check for system and user rc files
#
printer=`basename $0`
request_id=$1
systemrc="$0.conf"
logger -p lpr.debug -t "net_estbw: ${request_id}" "    system rc : ${systemrc}"
if [ -r "${systemrc}" ]
then
	. $systemrc
fi

#userrc="${HOME}/.${printer}_rc"
#logger -p lpr.debug -t "net_estbw: ${request_id}" "    user rc : ${userrc}"
#if [ -r "${userrc}" ]
#then
#	. $userrc
#fi


#
# set the log / trace files if required
#
#TEMPLOG="/tmp/estbwtemp.log"
#TEMPLOG="/dev/null"
if [ -z "${TEMPLOG}" ]
then
	TEMPLOG="/dev/null"
fi
logger -p lpr.debug -t "net_estbw: ${request_id}" "    temp log : ${TEMPLOG}"

#
# setup echo depending on OS
#
if [ -z "$(echo -e "")" ]
then
	ECHO="echo -e"
else
	ECHO="echo"
fi
$ECHO "estbw Filter Called" > $TEMPLOG

#####
# We can't do much except exit if spooler/scheduler
# cancels us.
#####
trap 'eval exit_clean 15' 15

####
#
# Send standard error messages to /dev/null rather than to
# the spooler. Avoids "Terminated" messages that shell puts out
# when gets SIGTERM. Save standard error so it can be used
# when we need it
####
exec 5>&2 2>/dev/null 3>&1

####
# set some global variables
####

: ${LPTMPDIR:=/tmp}
: ${SPOOLDIR:=/usr/spool/lp}
: ${LOCALPATH:=${SPOOLDIR}/bin}
PATH="/bin:/usr/bin:${LOCALPATH}"
exit_code=0

ARCHITECTURE="$(uname -p)"
OSRELEASEVERSION="$(uname -r | rev | cut -d. -f -2 | rev)"

# program to send data using the LPD protocol
if [ -x "/opt/toshiba/tap/bin/lpdsend.${OSRELEASEVERSION}" ]
then
	# Use OS-version-specific lpdsend if it is available
	LPDSENDCMD="/opt/toshiba/tap/bin/lpdsend.${OSRELEASEVERSION}"
elif [ -x "/opt/toshiba/tap/bin/lpdsend.${ARCHITECTURE}" ]
then
	# Use architecture-specific lpdsend if it is available
	LPDSENDCMD="/opt/toshiba/tap/bin/lpdsend.${ARCHITECTURE}"
else
	# Use the default lpdsend
	LPDSENDCMD="/opt/toshiba/tap/bin/lpdsend"
fi

LPDPORT="Print"			# LPD port name to use for the estbw 

banner="first"			# default do the banner first so it appears
				# first in our face-down output trays
bsource="auto"			# banner source is auto tray
outbin="OPTIONALOUTBIN2"	# set default output bin to bin 2
collate="1"			# default is to set collate on


printmode="NORMAL"                                      #
smoothing="1"			                                #
thinlinelimit="0"		                                #
erasabletoner="0"                                       #
tonersave="0"                                           # Default values for special
screentype="SMOOTH"		                                # estbw options
resolution="600x600"                                    #
mtype="Plain"                                           #
whitepaper="0"                                          #
folding="0"


####
# ${LPTELL} is the name of a program that will send its
# standard input to the Spooler. It is used to forward
# the description of a printer fault to the Spooler,
# which uses it in an alert to the administrator.
####
if [ ! -x "${LPTELL:=${LOCALPATH}/lp.tell}" ]
then
	fake_lptell ()
	{
		header="no"
		while read line
		do
			if [ "no" = "${header}" ]
			then
				errmsg ERROR ${E_IP_UNKNOWN} \
		"unknown printer/interface failure" \
		"consult your system administrator;
		reasons for failure (if any) follow:"
				header=yes
			fi
			$ECHO "${line}" >&2
		done
		return 1
	}
	LPTELL=fake_lptell
fi

#####
# Error message formatter:
#
# Invoke as
#
#	errmsg severity message-number problem help
#
# where severity is "ERROR" or "WARNING", message-number is
# a unique identifier, problem is a short description of the
# problem, and help is a short suggestion for fixing the problem.
#####

LP_ERR_LABEL="UX:lp"
E_IP_ARGS=1
E_IP_OPTS=2
#E_IP_FILTER=3
E_IP_UNKNOWN=5
E_IP_BADFILE=6
E_IP_ERRORS=12	# (in slow.filter)

errmsg ()
{
	case $1 in
	ERROR )
		sev="  ERROR";
		;;
	WARNING )
		sev="WARNING";
		;;
	esac

	$ECHO "${LP_ERR_LABEL}:$2 ${sev}: $3
	TO FIX: $4" >&5
}

###########
##
## Check arguments
###########

parse ()
{
	$ECHO "`expr \"$1\" : \"^[^=]*=\(.*\)\"`"
}

#####
##
## Error Cleanup and Exit
##
#####

exit_clean()
{

	if [ -f "${LPTMPDIR}/pr_eexit_code" ]
	then
		/bin/rm ${LPTMPDIR}/pr_eexit_code
	fi

	if [ -z "${SAVETEMP}" -a -f "${tmpfile}" ]
	then
		/bin/rm "${tmpfile}"
	fi

	exit $1
}

#####
#
# This program is invoked as
#
# ${SPOOLDIR}/.../printer request-id user title copies options files...
#
# The first three arguments are simply reprinted on the banner page,
# the fourth (copies) is used to control the number of copies to print,
# the fifth (options) is a blank separated list (in a single argument)
# of user or Spooler supplied options (without the -o prefix),
# and the last arguments are the files to print.
#####

$ECHO $0 $* >> $TEMPLOG
if [ $# -lt 5 ]
then
	errmsg ERROR ${E_IP_ARGS} \
		"wrong number of arguments to interface program" \
		"consult your system administrator"
	exit 1
fi

printer=`basename $0`
request_id=$1
user_name=$2
arg_title=$3
copies=$4
option_list=$5
DomainName=`domainname`

shift 5
files="$*"

$ECHO "printer =" ${printer} >> $TEMPLOG
$ECHO "request_id =" ${request_id} >> $TEMPLOG
$ECHO "user_name =" ${user_name} >> $TEMPLOG
$ECHO "title =" ${arg_title} >> $TEMPLOG
$ECHO "copies =" ${copies} >> $TEMPLOG
$ECHO "option_list =" ${option_list} >> $TEMPLOG
$ECHO "files =" ${files} >> $TEMPLOG
#
# get some default values if they exist
#
printer_conf=$0.conf
if [ -r "${printer_conf}" ]
then
	. ${printer_conf}
fi

#
# limit the copy count to the estbw limit of 999
#
if [ ${copies} -gt 999 ]
then
	copies=999
fi


#
# debug sent to file if defined in /etc/syslog.conf
# syslog.conf entry:
#	lpr.debug	/path/filename
#
logger -p lpr.debug -t "net_estbw: ${request_id}" " "
logger -p lpr.debug -t "net_estbw: ${request_id}" "INPUT"
logger -p lpr.debug -t "net_estbw: ${request_id}" "    printer : ${printer}"
logger -p lpr.debug -t "net_estbw: ${request_id}" "    request_id : ${request_id}"
logger -p lpr.debug -t "net_estbw: ${request_id}" "    user_name : ${user_name}"
logger -p lpr.debug -t "net_estbw: ${request_id}" "    title : ${arg_title}"
logger -p lpr.debug -t "net_estbw: ${request_id}" "    copies : ${copies}"
logger -p lpr.debug -t "net_estbw: ${request_id}" "    option_list : ${option_list}"
logger -p lpr.debug -t "net_estbw: ${request_id}" "    files : ${files}"
logger -p lpr.debug -t "net_estbw: ${request_id}" "        spooler_key ${SPOOLER_KEY}"

nofilebreak="no"
inlist=

for i in ${option_list}
do
	case "${inlist}${i}" in

	nobanner | nb )
		banner="none"
		;;

	nofilebreak )
		nofilebreak="yes"
		;;

	#####
	#
	# If you want to add simple options (e.g. -o simple)
	# identify them here.
	#####
#	simple )
#		simple="yes"
#		;;

	banner=first | banner )
		banner="first"
		;;

	banner=last )
		banner="last"
		;;

	dest=* )
		dest="`parse ${i}`"
		;;

	#
	# Stapling positions 2 and 5 are only valid for
	# Long-Edge-Feed (LEF) paper. Positions 7 and 8
	# are only valid for Short-Edge-Feed (SEF) paper.
	# There are 3 physical stapling positions and the
	# others are derived by rotating the print job
	# by 180 degrees. The Portrait and Landscape (P & L)
	# are just logical and they do not cause a rotation
	# of the paper. The feed direction depends on the
	# paper size in the selected input source.
	#
	staple=0 )
		staple="0"	# stapling off
		;;

	staple=1 )
		staple="769"	# upper left (P), upper right (L)
		;;

	staple=2 )
		staple="2"	# middle left (P), middle top (L), LEF only
		;;

	staple=3 )
		staple="33027"	# lower left (P), upper left (L)
		;;

	staple=4 )
		staple="387"	# upper right (P), lower right (L)
		;;

	staple=5 )
		staple="130"	# middle right (P), middle top (L), LEF only
		;;

	staple=6 )
		staple="33665"	# lower right (P), lower left (L)
		;;

	staple=7 )
		staple="512"	# middle top (P), middle right (L), SEF only
		;;

	staple=8 )
		staple="33280"	# middle bottom (P), middle left (L), SEF only
		;;

	staple=9 )
		staple="1028"	# saddle stitch - booklet mode
		;;


	#
	# folding
	#

	folding=on | folding=ON )
		folding="1"
		;;


	folding=off | folding=OFF )
		folding="0"
		;;


    #
    # Collate option
    # 

    collate=on | collate=ON )
        collate="1"
        ;;

    collate=off | collate=OFF )
        collate="0"
        ;;

	#
	# Hole punching options
	#
	# 1 = Long edge punch with rotation
	# 2 = Short edge punch with rotation
	# 3 = Long edge punch with 180 degree rotation
	# 4 = Short edge punch with 180 degree rotation
	#
	punch=0 | nopunch )
		punch="0"
		;;

	punch=1 )
		punch="1"
		;;

	punch=2 )
		punch="2"
		;;

	punch=3 )
		punch="3"
		;;

	punch=4 )
		punch="4"
		;;

    #
    #Color Balance CBK
    #

    CBK=-4 | cbk=-4 )
        cbk="FCFCFC"
        ;;

    CBK=-3 | cbk=-3 )
        cbk="FDFDFD"
        ;;

    CBK=-2 | cbk=-2 )
        cbk="FEFEFE"
        ;;

    CBK=-1 | cbk=-1 )
        cbk="FFFFFF"
        ;;

    CBK=0 | cbk=0 )
        cbk="000000"
        ;;

    CBK=1 | cbk=1 )
        cbk="010101"
        ;;

    CBK=2 | cbk=2 )
        cbk="020202"
        ;;

    CBK=3 | cbk=3 )
        cbk="030303"
        ;;

    CBK=4 | cbk=4 )
        cbk="040404"
        ;;

    #
    #Sharpness option
    #

    sharpness=-4 )
        sharpnessvalue="FC"
        ;;
    sharpness=-3 )
        sharpnessvalue="FD"
        ;;

    sharpness=-2 )
        sharpnessvalue="FE"
        ;;

    sharpness=-1 )
        sharpnessvalue="FF"
        ;;

    sharpness=0 )
        sharpnessvalue="00"
        ;;

    sharpness=1 )
        sharpnessvalue="01"
        ;;

    sharpness=2 )
        sharpnessvalue="02"
        ;;

    sharpness=3 )
        sharpnessvalue="03"
        ;;

    sharpness=4 )
        sharpnessvalue="04"
        ;;
    #
    #Brightness option
    #

    brightness=-4 )
        brightnessvalue="FC"
        ;;
    brightness=-3 )
        brightnessvalue="FD"
        ;;

    brightness=-2 )
        brightnessvalue="FE"
        ;;

    brightness=-1 )
        brightnessvalue="FF"
        ;;

    brightness=0 )
        brightnessvalue="00"
        ;;

    brightness=1 )
        brightnessvalue="01"
        ;;

    brightness=2 )
        brightnessvalue="02"
        ;;

    brightness=3 )
        brightnessvalue="03"
        ;;

    brightness=4 )
        brightnessvalue="04"
        ;;
    #
    #Contrast option
    #

    contrast=-4 )
        contrastvalue="FC"
        ;;
    contrast=-3 )
        contrastvalue="FD"
        ;;

    contrast=-2 )
        contrastvalue="FE"
        ;;

    contrast=-1 )
        contrastvalue="FF"
        ;;

    contrast=0 )
        contrastvalue="00"
        ;;

    contrast=1 )
        contrastvalue="01"
        ;;

    contrast=2 )
        contrastvalue="02"
        ;;

    contrast=3 )
        contrastvalue="03"
        ;;

    contrast=4 )
        contrastvalue="04"
        ;;

    #
    # backgroundadjustment option
    #

    backgroundadjustment=-4 )
        backgroundadjustmentvalue="FC"
        ;;
    backgroundadjustment=-3 )
        backgroundadjustmentvalue="FD"
        ;;

    backgroundadjustment=-2 )
        backgroundadjustmentvalue="FE"
        ;;

    backgroundadjustment=-1 )
        backgroundadjustmentvalue="FF"
        ;;

    backgroundadjustment=0 )
        backgroundadjustmentvalue="00"
        ;;

    backgroundadjustment=1 )
        backgroundadjustmentvalue="01"
        ;;

    backgroundadjustment=2 )
        backgroundadjustmentvalue="02"
        ;;

    backgroundadjustment=3 )
        backgroundadjustmentvalue="03"
        ;;

    backgroundadjustment=4 )
        backgroundadjustmentvalue="04"
        ;;

    #
    # Resolution
    #
    
    resolution=600 )
        resolution="600x600"
        ;;
    
    resolution=1200 )
        resolution="1200x1200"
        ;;



	#
	#Smoothing
	#

	smoothing=on | smoothing=ON)
		smoothing="1"
		;;

	smoothing=off | smoothing=OFF )
		smoothing="0"
		;;

	#
	#Toner mode
	#
	tonermode=black)
		erasabletoner="0"
		;;
	
	tonermode=eb | tonermode=EB | tonermode=erasableblue)
		erasabletoner="1"
		;;
	
	#
	#Toner save
	#

	tonersave=on | tonersave=ON )
		tonersave="1"
		;;

	tonersave=off | tonersave=OFF )
		tonersave="0"
		;;

	#
	#Thin line limit
	#

	thinlinelimit=on | thinlinelimit=ON )
		thinlinelimit="1"
		;;


	thinlinelimit=off | thinlinelimit=OFF )
		thinlinelimit="0"
		;;

    #
    #Blank page
    #
    # 0 = blank page OFF
    # 1 = blank page ON
    #

    blankpage=0 )
        whitepaper="0"
        ;;

    blankpage=1 )
        whitepaper="1"
        ;;


	#
	# Raw Print - Factory Default Settings
	#
	dpitch=* )
		def_pitch="`parse ${i}`"
		test_val="`$ECHO "${def_pitch}" | sed 's/\..*$//'`"
		test_val=${test_val}"`$ECHO "${def_pitch}" | sed 's/^.*\.//'`"
		if [ ${test_val} -lt 44 ] || [ ${test_val} -gt 9999 ]
		then
			default_pitch="10.00"
		else
			default_pitch="${def_pitch}"
		fi
		send_defaults="1"
		;;

	dpointsize=* )
		def_pointsize="`parse ${i}`"
		test_val="`$ECHO "${def_pointsize}" | sed 's/\..*$//'`"
		test_val=${test_val}"`$ECHO "${def_pointsize}" | sed 's/^.*\.//'`"
		if [ ${test_val} -lt 400 ] || [ ${test_val} -gt 99975 ]
		then
			default_pointsize="12.00"
		else
			default_pointsize="${def_pointsize}"
		fi
		send_defaults="1"
		;;

	dorientation=* )
		def_orientation="`parse ${i}`"
		if [ ${def_orientation} -lt 0 ] || [ ${def_orientation} -gt 1 ]
		then
			default_orientation="0"
		else
			default_orientation="${def_orientation}"
		fi
		send_defaults="1"
		;;

	dformlines=* )
		def_formlines="`parse ${i}`"
		test_val="`$ECHO "${def_formlines}" | sed 's/\..*$//'`"
		test_val=${test_val}"`$ECHO "${def_formlines}" | sed 's/^.*\.//'`"
		if [ ${test_val} -lt 500 ] || [ ${test_val} -gt 12800 ]
		then
			default_formlines="12.00"
		else
			default_formlines="${def_formlines}"
		fi
		send_defaults="1"
		;;

	dsymbolset=* )
		def_symbolset="`parse ${i}`"
		if [ ${def_symbolset} -lt 1 ] || [ ${def_symbolset} -gt 999 ]
		then
			default_symbolset="341"
		else
			default_symbolset="${def_symbolset}"
		fi
		send_defaults="1"
		;;

	factorydef=off | factorydef=OFF )
		factorydefault="0"
		send_defaults="1"
		;;

	factorydef=on | factorydef=ON )
		factorydefault="1"
		send_defaults="1"
		;;

	#
	# Booklet mode options
	#
	# LT (lt) - Letter paper
	# A4 (a4) - A4 paper
	# LG (lg) - Legal paper
	# ST (st) - Statement paper
	# LD (ld) - Ledger paper
	# FO (fo) - Folio paper
	# A3 (a3) - A3 paper
	# A5 (a5) - A5 paper
	# B4 (B4) - B4 paper
	# B5 (B5) - B5 paper
	# CO (co) - Computer paper
	# 13 (13) - 13" Ledger paper
	# SQ (sq) - 8.5" Square paper
	# 8K (8k) - 8K paper
    # 16K(16k)- 16K paper

	booklet=letter | booklet=lt | booklet=LT )
		booklet="LT"
		booklet_paper="LETTER"
		;;


	booklet=8K | booklet=8k )
		booklet="8K"
		booklet_paper="8K"
		;;

	booklet=16K | booklet=16k )
		booklet="16K"
		booklet_paper="16K"
		;;

	booklet=A4 | booklet=a4 )
		booklet="A4"
		booklet_paper="A4"
		;;

	booklet=legal | booklet=lg | booklet=LG )
		booklet="LG"
		booklet_paper="LEGAL"
		;;

	booklet=statement | booklet=st | booklet=ST )
		booklet="ST"
		booklet_paper="STATEMENT"
		;;

	booklet=ledger | booklet=ld | booklet=LD )
		booklet="LD"
		booklet_paper="LEDGER"
		;;

	booklet=folio | booklet=folio-japan )
		booklet="FO"
		booklet_paper="FOLIO"
		;;

	booklet=A3 | booklet=a3 )
		booklet="A3"
		booklet_paper="A3"
		;;

	booklet=A5 | booklet=a5 )
		booklet="A5"
		booklet_paper="A5"
		;;

	booklet=B4 | booklet=b4 | booklet=B4-JIS | booklet=b4-jis )
		booklet="B4"
		booklet_paper="B4"
		;;

	booklet=B5 | booklet=b5 | booklet=B5-JIS | booklet=b5-jis )
		booklet="B5"
		booklet_paper="B5"
		;;

	booklet=computer | booklet=co | booklet=CO )
		booklet="CO"
		booklet_paper="COMPUTER"
		;;

	booklet=legal13 | booklet=lg13 | booklet=LG13 )
		booklet="13"
		booklet_paper="LEGAL13"
		;;

	booklet=SQ85 | booklet=sq85 | booklet=letter-square )
		booklet="SQ"
		booklet_paper="SQ85"
		;;

	#
	# Left to right layout
	# 
	# This option determins the layout of the booklet.
	#
	# OFF - The layout of the pages is right to left.
	# ON  - The layout of the pages is left to right.
	#
	left2right=on | left2right=ON )
		lefttoright="1"
		;;

	left2right=off | left2right=OFF )
		lefttoright="0"
		;;
	#
	# Center Margin setting
	#
	# This option sets the centre margin (or "gutter") pixels
	#
	centermargin=* )
		centermargin="`parse ${i}`"
		;;
	#
	# Outer Margin setting
	#
	# This option sets the outer margin (or "creep") pixels
	#
	outermargin=* )
		outermargin="`parse ${i}`"
		;;
	#


	simplex )
		duplex="simplex"
		;;

	duplex | lduplex | duplex_long | duplex=long | hduplex )
		duplex="long"
		;;

	sduplex | duplex_short | duplex=short | vduplex )
		duplex="short"
		;;

	auto )
		lang=""
		;;

	pcl )
		lang="PCL"
		;;

	postscript | ps )
		lang="PS"
		;;

	raw )
		lang="RAW"
		;;

	A4 | a4 )
		paper="A4"
		;;

	letter | lt | LT )
		paper="LETTER"
		;;

	legal | lg | LG )
		paper="LEGAL"
		;;

	statement | st | ST )
		paper="STATEMENT"
		;;

	ledger | ld | LD )
		paper="LEDGER"
		;;

	folio | folio-japan )
		paper="FOLIO"
		;;

	A3 | a3 )
		paper="A3"
		;;

	A5 | a5 )
		paper="A5"
		;;

	A6 | a6 )
		paper="A6"
		;;

	B4-JIS | b4-jis | B4 | b4 )
		paper="B4"
		;;

	B5-JIS | b5-jis | B5 | b5 )
		paper="B5"
		;;

	computer | co | CO )
		paper="COMPUTER"
		;;

	legal13 | lg13 | LG13 )
		paper="LEGAL13"
		;;

	letter-square | sq85 | SQ85 )
		paper="SQ85"
		;;

	8k | 8K )
		paper="8K"
		;;

	16k | 16K )
		paper="16K"
		;;

	jpostcard | postcard )
		paper="JPOST"
		;;
	
	jpostcarddr )
		paper="JPOSTD"
		;;
	
	com9)
		paper="ENV9"
		;;
	
	com10)
		paper="ENV10"
		;;
	
	monarch)
		paper="ENVMONARCH"
		;;
	
	dl | DL)
		paper="ENVDL"
		;;
	
	cho3 | chou3)
		paper="ENVCHO3"
		;;
	
	cho4 | chou4)
		paper="ENVCHO3"
		;;
	
	you4)
		paper="ENVYOU4"
		;;
	
	c5 | C5)
		paper="ENVC5"
		;;
	
	portrait )
		orient="PORTRAIT"
		;;

	landscape )
		orient="LANDSCAPE"
		;;

	c )
		pitch="16.67"
		;;

	10 )
		pitch="10"
		;;

	12 )
		pitch="12"
		;;

	pitch=* | cpi=* )
		pitch="`parse ${i}`"
		;;

	pl=* | length=* )
		pl_val="`parse ${i}`"
		if [ ${pl_val} -lt 5 ]
		then
			page_length="5"
		else
			page_length="${pl_val}"
		fi
		;;

	wrap )
		wrap="yes"
		;;

	nowrap )
		wrap="no"
		;;

	mtype=* )
		mediatype="`parse ${i}`"
		mtype="`$ECHO "${mediatype}" | sed 's/_/ /'`"
		;;

	inner )
		outbin="UPPER"
		;;

	jsp1 )
		outbin="OPTIONALOUTBIN4"
		;;

	jsp2 )
		outbin="OPTIONALOUTBIN5"
		;;

	bin1 )
		outbin="OPTIONALOUTBIN1"
		;;

	bin2 )
		outbin="OPTIONALOUTBIN2"
		;;

	auto-source )
		source="auto"
		;;

    lcf | LCF )
        source="lcf"
        ;;

	manual )
		source="manual"
		;;

	upper | cas1 | drawer1 )
		source="upper"
		;;

	lower | cas2 | drawer2 )
		source="lower"
		;;

    tandem )
        source="tandem"
        ;;

    external )
        source="external"
        ;;

	pedupper | cas3 | drawer3 )
		source="pedupper"
		;;

	pedlower | cas4 | drawer4 )
		source="pedlower"
		;;

	bmtype=* )
		bmediatype="`parse ${i}`"
		bmtype="`$ECHO "${bmediatype}" | sed 's/_/ /'`"
		;;
		

	#
	# bsource stands for banner source
	#

	bauto-source )
		bsource="auto"
		;;

	bupper | bcas1 | bdrawer1 )
		bsource="upper"
		;;

	blower | bcas2 | bdrawer2 )
		bsource="lower"
		;;

	bpedupper | bcas3 | bdrawer3 )
		bsource="pedupper"
		;;

	bpedlower | bcas4 | bdrawer4 )
		bsource="pedlower"
		;;

	blcf | BLCF )
		bsource="lcf"
		;;

    bexternal )
        bsource="external"
        ;;

    btandem )
        bsource="tandem"
        ;;

	lm=* )
		lm="`parse ${i}`"
		;;

	rm=* )
		rm="`parse ${i}`"
		;;

	tm=* )
		tm="`parse ${i}`"
		;;

	tl=* )
		tl="`parse ${i}`"
		;;

	normal )
		printmode="NORMAL"
		;;

	hold )
		printmode="HOLD"
		;;


	proof )
		printmode="PROOF"
		;;

#	box )
#		printmode="BOX"
#		box="1"
#		;;

#	boxprint )
#		printmode="NORMAL"
#		box="1"
#		;;

#	private=* )	
#		printmode="PRIVATE"
#		din="`parse ${i}`"
#   Clips the length of the string to 63 no other checks done
#        din=${din:0:63}
#		;;
	private=* )	
		printmode="PRIVATE"
		dintmp="`parse ${i}`"
#   Clips the length of the string to 63 no other checks done
        din=`$ECHO | awk '{print substr("'"${dintmp}"'",1,63)}'`
		;;

# Old department code for 5 gigits only.
#
#
#	dept=[0-9][0-9][0-9][0-9][0-9] )	# 5 digit number only
#		access="`parse ${i}`"
#		if [ "$access" = "00000" ]
#		then
#			access=""
#		fi
#		;;


#
#   New department code clips the length of the string to 63 and checks for 00000 if 00000 then makes the access code nothing.
#
	dept=* )	
		depttmp="`parse ${i}`"
#   Clips the length of the string to 63
        access=`$ECHO | awk '{print substr("'"${depttmp}"'",1,63)}'`
		if [ "$access" = "00000" ]
		then
			access=""
		fi
		;;



	#####
	#
	# If you want to add simple-value options (e.g. -o value=a)
	# identify them here.
	#####
#	value=* )
#		value=`parse ${i}`
#		;;

	#####
	#
	# If you want to add options that,
	# take a list (e.g. -o lopt='a b c'), identify
	# them here and below (look for LOPT).
	#####

#	flist=* | lpd=* | options=* )
	flist=* | lpd=* )
#LOPT	stty=* | flist=* | lpd=* | lopt=* )

		inlist=`expr "${inlist}${i}" : "^\([^=]*=\)"`
		case "${i}" in
		${inlist}\'*\' )
			item=`expr "${i}" : "^[^=]*='*\(.*\)'\$"`
			;;
		${inlist}\' )
			continue
			;;
		${inlist}\'* )
			item=`expr "${i}" : "^[^=]*='*\(.*\)\$"`
			;;
		${inlist}* )
			item=`expr "${i}" : "^[^=]*=\(.*\)\$"`
			;;
		*\' )
			item=`expr "${i}" : "^\(.*\)'\$"`
			;;
		* )
			item="${i}"
			;;
		esac

		#####
		#
		# We don't dare use "eval" because a clever user could
		# put something in an option value that we'd end up
		# exec'ing.
		#####
		case "${inlist}" in
		flist= )
			flist="${flist} ${item}"
			;;
		lpd= )
			lpd="${lpd} ${item}"
			;;
#LOPT		lopt= )
#LOPT			lopt="${lopt} ${item}"
#LOPT			;;
#		options= )
#			options="${options} ${item}"
#			;;
		esac

		case "${i}" in
		${inlist}\'*\' )
			inlist=
			;;
		${inlist}\'* )
			;;
		*\' | ${inlist}* )
			inlist=
			;;
		esac
		;;

	* )
		errmsg WARNING ${E_IP_OPTS} \
			"unrecognized \"-o ${i}\" option" \
			"check the option, resubmit if necessary
		printing continues"
		;;
	esac
done

logger -p lpr.debug -t "net_estbw: ${request_id}" "term : ${TERM}"

#
# If the destination has not been defined
# try using the printer name as the destination
#
if [ -z "${dest}" ]
then
	dest=$printer
fi

LPDSEND="${LPDSENDCMD} ${dest} $request_id $user_name $LPDPORT"

logger -p lpr.debug -t "net_estbw: ${request_id}" "LPDSEND= ${LPDSEND}"
logger -p lpr.debug -t "net_estbw: ${request_id}" "filter : ${FILTER}"

node=`uname -n`
pid=$$
tmpfile=${LPTMPDIR}/${node}.${pid}

logger -p lpr.debug -t "net_estbw: ${request_id}" "tmpfile : ${tmpfile}"

pcl_source()
{
#	if [ -n "$1" ]
#	then
#		length=`$ECHO "${1}" | wc | awk '{print $3}'`
#		$ECHO "\033&n${length}Wd${1}\c"
#	fi

	case $1 in
	Plain )
		$ECHO "\033*t20J\c"
		$ECHO "\033&n6WdPlain\c"
        ;;
	Thick )
		$ECHO "\033*t20J\c"
		$ECHO "\033&n6WdThick\c"
        ;;
	ThickBack )
		$ECHO "\033*t20J\c"
		$ECHO "\033&n7WdThickb\c"
        ;;
	Thick1 )
		$ECHO "\033*t26J\c"
		$ECHO "\033&n8WdThick 1\c"
        ;;
	Thick2 )
		$ECHO "\033*t32J\c"
		$ECHO "\033&n8WdThick 2\c"
        ;;
	Thick3 )
		$ECHO "\033*t38J\c"
		$ECHO "\033&n8WdThick 3\c"
        ;;
	Transparency )
		$ECHO "\033*t44J\c"
		$ECHO "\033&n13WdTransparency\c"
        ;;
    Envelope )
    	$ECHO "\033*t50J\c" 
    	$ECHO "\033&n9WdEnvelope\c"
        ;;
    Envelope1 )
    	$ECHO "\033*t56J\c" 
    	$ECHO "\033&n11WdEnvelope 1\c"
        ;;
    Envelope2 )
    	$ECHO "\033*t62J\c" 
    	$ECHO "\033&n11WdEnvelope 2\c"
        ;;
    Envelope3 )
    	$ECHO "\033*t68J\c" 
    	$ECHO "\033&n11WdEnvelope 3\c"
        ;;
    Envelope4 )
    	$ECHO "\033*t74J\c" 
    	$ECHO "\033&n11WdEnvelope 4\c"
        ;;            
    UserType[0-9] )
		$ECHO "\033*t20J\c"
		$ECHO "\033&n10Wd${1}\c"
        ;;
    UserType10 )
		$ECHO "\033*t20J\c"
		$ECHO "\033&n11WdUserType10\c"
        ;;        
	esac

	case $2 in
	manual )
		$ECHO "\033&l2H\c" ;;
	upper )
		$ECHO "\033&l1H\c" ;;
	lower )
		$ECHO "\033&l4H\c" ;;
	pedlower )
		$ECHO "\033&l21H\c" ;;
	lcf | pedupper | tandem )
		$ECHO "\033&l5H\c" ;;
    external )
        $ECHO "\033&l20H" ;;
	auto )
		$ECHO "\033&l7H\c" ;;
	esac
}

add_banner()
{
	tmpuser="`$ECHO "${user_name}" | sed 's/.*!//'`"
	tmpmach="`$ECHO "${user_name}" | sed 's/!.*//'`"

	if [ "${tmpmach}" = "${user_name}"  -a -n "${cfile}" ]
	then
		if [ -n "${cfile}" ]
		then
			tmpmach="`sed -n '/^H/s/^H//p' ${cfile}`"
		else
			tmpmach=""
		fi
	fi

	$ECHO "\033%-12345X@PJL JOB"

	if [ -n "$tmpuser" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT USERLOGIN=${tmpuser}"
	else
		$ECHO "@PJL COMMENT DSSC PRINT USERLOGIN=${user_name}"
	fi

	$ECHO "@PJL COMMENT DSSC JOB NAME=Banner ${title}"

	if [ -n "${DomainName}" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT DOMAINNAME=${DomainName}"
		$ECHO "@PJL COMMENT DSSC PRINT CERTIFIED=1"
	else
		$ECHO "@PJL COMMENT DSSC PRINT DOMAINNAME="
		$ECHO "@PJL COMMENT DSSC PRINT CERTIFIED=0"
	fi


	if [ -n "${printmode}" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT PRINTMODE=${printmode}"
		if [ "${printmode}" = "PRIVATE" ]
		then
			$ECHO "@PJL COMMENT DSSC PRINT PRIVPRINT=${din}"
		fi
#		if [ "${box}" = "1" ]
#		then
#			$ECHO "@PJL COMMENT DSSC BOX BOX=1"
#			$ECHO "@PJL COMMENT DSSC BOX BOXNO=000"
#		fi
	fi

	if [ -n "${access}" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT ACCESSCODE=${access}"
	fi

	$ECHO "@PJL SET COPIES=1"
	$ECHO "@PJL COMMENT DSSC PRINT SC=5"
	$ECHO "@PJL COMMENT DSSC PRINT HOLEPUNCH=0"
	$ECHO "@PJL COMMENT DSSC PRINT STAPLING=0"
	$ECHO "@PJL COMMENT DSSC PRINT COLLATE=1"
	$ECHO "@PJL SET DUPLEX=OFF"

	if [ -n "$banner_paper" ]
	then
		$ECHO "@PJL SET PAPER=${banner_paper}"
	elif [ -n "${paper}" ]
	then
		if [ "${paper}" = "A4" ] || [ "${paper}" = "LETTER" ] || [ "${paper}" = "LEGAL" ] || [ "${paper}" = "LEDGER" ] || [ "${paper}" = "LDWIDE" ] || [ "${paper}" = "FOLIO" ] || [ "${paper}" = "A3" ] || [ "${paper}" = "A3WIDE" ] || [ "${paper}" = "B4" ] || [ "${paper}" = "COMPUTER" ] || [ "${paper}" = "LEGAL13" ] || [ "${paper}" = "SQ85" ] || [ "${paper}" = "8K" ] || [ "${paper}" = "16K" ]
		then
			$ECHO "@PJL SET PAPER=${paper}"
		fi
	fi

	$ECHO "@PJL SET ORIENTATION=PORTRAIT"

	if [ -n "${outbin}" ]
	then
		$ECHO "@PJL SET OUTBIN=${outbin}"
	fi

	$ECHO "@PJL ENTER LANGUAGE=PCL"
	$ECHO "\033&k2G\033&l6D\033&s0C\c"	# use 6 lpi and auto-wrap

	pcl_source "${bmtype}" "${bsource}"

	$ECHO "\033(8U\033(s1p40v1s0b16901T\c"	# Times New Roman italic 40 point


	if [ -n "$tmpuser" ]
	then
		$ECHO "\n\n\n${tmpuser}"
	else
		$ECHO "\n\n\n${user_name}"
	fi

	$ECHO "\033(s13v0S\c"

	if [ -n "$tmpmach" ]
	then
		$ECHO "\n\nJob: ${request_id} from ${tmpmach}"
	else
		$ECHO "\n\nJob: ${request_id}"
	fi

	$ECHO "\nTitle: ${title}"

	tmpopt="`$ECHO "${option_list}" | sed -e 's/dest=[^ ]*//' -e 's/flist='.*'//' -e 's/^ *//' -e 's/ *$//'`"
	$ECHO "\nOptions: ${tmpopt}"
	$ECHO "\nCopies: ${copies}"
	$ECHO "\nPrinter: ${dest}"
	$ECHO "\nDate: `date`"

	$ECHO "\nAvailable Options (see \"man net_estbw\" for details)"
	$ECHO "\033(s0p8.5v16.67h0s3b4099T\c"
	$ECHO "Languages:\033(s0B auto, pcl, postscript, ps, raw"
	$ECHO "\033(s3BFinisher:\033(s0B staple=0, staple=[1-9], inner, jsp1, jsp2, bin1, bin2,"
#	$ECHO "\033(s3BFinisher:\033(s0B staple=0, staple=[1-9], inner, bin1, bin2,"
	$ECHO "          punch=0, punch=[1-4], collate=ON, collate=OFF"
	$ECHO "          \033(s3B456, 507, 5008A, 5008LP, 5018A, 8508A and 8518A Series\033(s0B folding=ON, folding=OFF"
	$ECHO "\033(s3BPCL Printing:\033(s0B portrait, landscape, c, 10, 12, pitch=<value>, pl=<value>,"
	$ECHO "              wrap, nowrap, lm=<value>, rm=<value>, tm=<value>, tl=<value>"
	$ECHO "\033(s3BDuplexing:\033(s0B simplex, hduplex, vduplex"
	$ECHO "\033(s3BPaper:\033(s0B letter, A4, legal, statement, ledger, folio, A3," 
	$ECHO "        A5, A6, B4, B5, computer, 8K, 16K, J postcard, J double postcard,"
	$ECHO "        legal13, sq85"
	$ECHO "\033(s3BLayout:\033(s0B booklet=letter, A4, legal, statement, ledger, folio, A3, A5, B4, B5,"
	$ECHO "         computer, 8K, 16K, legal13 or sq85, left2right=on, left2right=off"
	$ECHO "         centermargin=<value>, outermargin=<value>"
	$ECHO "\033(s3BQuality:\033(s0B blankpage=[0-1], smoothing=ON, smoothing=OFF, thinlinelimit=ON,"
	$ECHO "	        thinlinelimit=OFF, tonersave=OFF, tonersave=ON"
	$ECHO "         \033(s3B5008LP Series"
	$ECHO "         \033(s0B    tonermode=black, tonermode=erasableblue,"
    $ECHO "         \033(s0B    CBK=<Value>, contrast=<Value>, sharpness=<Value>,"
    $ECHO "         \033(s0B    brightness=<Value>, saturation=<Value>,"
    $ECHO "         \033(s0B    backgroundadjustment=<Value>,"
	$ECHO "\033(s3BSource:\033(s0B upper, lower, lcf, pedupper, pedlower, drawer1, drawer2, drawer3,"
    $ECHO "          drawer4, tandem, external, auto-source, manual, mtype=<media type>"
	$ECHO "\033(s3BPrint Mode:\033(s0B normal, proof, private=<value>, dept=<value>"
	$ECHO "          \033(s3B455, 855, 456, 856, 507, 857, 5008A, 5018A, 8508A, 8518A, 306LP, 307LP, 5008LP, LP30, LP301, LP50 Series\033(s0B hold"
	$ECHO "\033(s3BResolution:\033(s0B"
	$ECHO "          \033(s3B5008A, 5008LP, 5018A, 8508A and 8518A Series\033(s0B resolution=<value>"
	$ECHO "\033(s3BBanner:\033(s0B banner=last, banner=first, nobanner, nb"
	$ECHO "\033(s3BBanner Source:\033(s0B bupper, blower, bpedupper, bpedlower, blcf, bdrawer1, bdrawer2,"
	$ECHO "               bdrawer3, bdrawer4, btandem, bexternal, bauto-source, bmtype=<media type>"

	$ECHO "\033%-12345X@PJL EOJ"
}

add_defaults()
{
	tmpuser="`$ECHO "${user_name}" | sed 's/.*!//'`"

	$ECHO "\033%-12345X@PJL JOB"

	if [ -n "$tmpuser" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT USERLOGIN=${tmpuser}"
	else
		$ECHO "@PJL COMMENT DSSC PRINT USERLOGIN=${user_name}"
	fi

	$ECHO "@PJL COMMENT DSSC JOB NAME=Defaults"
	$ECHO "@PJL COMMENT DSSC PRINT PRINTMODE=NORMAL"

	if [ -n "${factorydefault}" -a "${factorydefault}" = "1" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT FACTORYDEFAULT=${factorydefault}"
	else
		if [ -n "${default_pitch}" ]
		then
			$ECHO "@PJL COMMENT DSSC PRINT PITCH=${default_pitch}"
		fi
		if [ -n "${default_pointsize}" ]
		then
			$ECHO "@PJL COMMENT DSSC PRINT POINTSIZE=${default_pointsize}"
		fi
		if [ -n "${default_orientation}" ]
		then
			$ECHO "@PJL COMMENT DSSC PRINT ORIENTATION=${default_orientation}"
		fi
		if [ -n "${default_formlines}" ]
		then
			$ECHO "@PJL COMMENT DSSC PRINT FORMLINES=${default_formlines}"
		fi
		if [ -n "${default_symbolset}" ]
		then
			$ECHO "@PJL COMMENT DSSC PRINT SYMBOLSET=${default_symbolset}"
		fi
	fi

	$ECHO "\033%-12345X@PJL EOJ"
}

add_options()
{
	tmpuser="`$ECHO "${user_name}" | sed 's/.*!//'`"

	$ECHO "\033%-12345X@PJL JOB"

	if [ -n "$tmpuser" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT USERLOGIN=${tmpuser}"
	else
		$ECHO "@PJL COMMENT DSSC PRINT USERLOGIN=${user_name}"
	fi

	$ECHO "@PJL COMMENT DSSC JOB NAME=${title}"

	if [ -n "${DomainName}" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT DOMAINNAME=${DomainName}"
		$ECHO "@PJL COMMENT DSSC PRINT CERTIFIED=1"
	else
		$ECHO "@PJL COMMENT DSSC PRINT DOMAINNAME="
		$ECHO "@PJL COMMENT DSSC PRINT CERTIFIED=0"
	fi


	if [ -n "${printmode}" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT PRINTMODE=${printmode}"
		if [ "${printmode}" = "PRIVATE" ]
		then
			$ECHO "@PJL COMMENT DSSC PRINT PRIVPRINT=${din}"
		fi
	fi

	if [ -n "${access}" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT ACCESSCODE=${access}"
	fi

	if [ -n "${punch}" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT HOLEPUNCH=${punch}"
	fi

	if [ -n "${booklet}" ]
	then
		$ECHO "@PJL SET DUPLEX=ON"
		$ECHO "@PJL SET BINDING=SHORTEDGE"
		$ECHO "@PJL COMMENT DSSC PRINT BOOKLET=${booklet}"
		if [ -z "${lefttoright}" ]
		then
			$ECHO "@PJL COMMENT DSSC PRINT LEFTTORIGHT=1"
		fi

		if [ -n "${paper}" ]
		then
			banner_paper="${paper}"
		else
			banner_paper=" "
		fi	

		paper="${booklet_paper}"
	fi

	if [ -n "${lefttoright}" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT LEFTTORIGHT=${lefttoright}"
		if [ "${lefttoright}" = "1" ]
		then
			$ECHO "@PJL SET BINDING=SHORTEDGE"
		fi
	fi

	if [ -n "${centermargin}" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT CENTERMARGIN=${centermargin}"
	fi

	if [ -n "${outermargin}" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT OUTERMARGIN=${outermargin}"
	fi

	$ECHO "@PJL SET COPIES=${copies}"
	$ECHO "@PJL COMMENT DSSC PRINT NUMCOPIES=${copies}"
	$ECHO "@PJL COMMENT DSSC PRINT SC=5"
	$ECHO "@PJL COMMENT DSSC PRINT COLLATE=${collate}"
	$ECHO "@PJL COMMENT DSSC PRINT XYRESOLUTION=${resolution}"
	$ECHO "@PJL COMMENT DSSC PRINT SMOOTHING=${smoothing}"
	$ECHO "@PJL COMMENT DSSC PRINT THINLINELIMIT=${thinlinelimit}"
	$ECHO "@PJL COMMENT DSSC PRINT ERASABLETONER=${erasabletoner}"
	$ECHO "@PJL COMMENT DSSC PRINT TONERSAVE=${tonersave}"
    $ECHO "@PJL COMMENT DSSC PRINT WHITEPAPER=${whitepaper}"
 
    if [ -n "${cbk}" ]
    then
        $ECHO "@PJL COMMENT DSSC PRINT CB K=${cbk}" 
    fi

    if [ -n "${sharpnessvalue}" ]
    then
        $ECHO "@PJL COMMENT DSSC PRINT SHARPNESS=${sharpnessvalue}" 
    fi

    if [ -n "${brightnessvalue}" ]
    then
        $ECHO "@PJL COMMENT DSSC PRINT BRIGHTNESS=${brightnessvalue}" 
    fi

    if [ -n "${contrastvalue}" ]
    then
        $ECHO "@PJL COMMENT DSSC PRINT CONTRAST=${contrastvalue}" 
    fi

    if [ -n "${backgroundadjustmentvalue}" ]
    then
        $ECHO "@PJL COMMENT DSSC PRINT BACKGROUND ADJUSTMENT=${backgroundadjustmentvalue}" 
    fi

  	if [ -n "${staple}" ]
  	then
		$ECHO "@PJL COMMENT DSSC PRINT STAPLING=${staple}"
	fi

	if [ -n "{screentype}" ]
	then
		$ECHO "@PJL COMMENT DSSC PRINT SCREENTYPE=${screentype}"
	fi

	case "${duplex}" in
	simplex )
		$ECHO "@PJL SET DUPLEX=OFF"
		;;

	long )
		$ECHO "@PJL SET DUPLEX=ON"
		$ECHO "@PJL SET BINDING=LONGEDGE"
		;;

	short )
		$ECHO "@PJL SET DUPLEX=ON"
		$ECHO "@PJL SET BINDING=SHORTEDGE"
		;;
	esac

	if [ -n "${paper}" ]
	then
		$ECHO "@PJL SET PAPER=${paper}"
	fi

	if [ -n "${orient}" ]
	then
		$ECHO "@PJL SET ORIENTATION=${orient}"
	fi

	if [ -n "${outbin}" ]
	then
		$ECHO "@PJL SET OUTBIN=${outbin}"
	fi

	if [ -z "$lang" ]
	then
		tmp=`head -1 ${file} | cut -b1-2`
		if [ "$tmp" = "%!" ]
		then
			real_lang="PS"
		else
			real_lang="PCL"
		fi
	else
		real_lang=$lang
	fi


   	if [ "$folding" = "1" ]
   	then
		$ECHO "@PJL COMMENT DSSC PRINT FOLD=CENTER"
   	fi


	if [ "$real_lang" = "PS" ]
	then
		$ECHO "@PJL ENTER LANGUAGE=POSTSCRIPT"
		$ECHO "%!PS"
		$ECHO "<</DeferredMediaSelection true>> setpagedevice"

		case ${source} in
		manual )
			$ECHO "<</ManualFeed true>> setpagedevice" ;;
		upper )
			$ECHO "<</MediaPosition 0>> setpagedevice" ;;
		lower )
			$ECHO "<</MediaPosition 1>> setpagedevice" ;;
		pedlower )
			$ECHO "<</MediaPosition 5>> setpagedevice" ;;
		lcf | pedupper | tandem )
			$ECHO "<</MediaPosition 4>> setpagedevice" ;;
        external )
            $ECHO "<</MediaPosition 6>> setpagedevice" ;;
		auto )
			$ECHO "<</MediaPosition null>> setpagedevice" ;;
		esac

	 	case $mtype in
    	Plain )
            $ECHO "<</MediaType (Plain)>> setpagedevice"
            ;;
    	Thick1 )
            $ECHO "<</MediaType (Thick 1)>> setpagedevice"
            ;;
    	Thick2 )
            $ECHO "<</MediaType (Thick 2)>> setpagedevice"
            ;;
    	Thick3 )
            $ECHO "<</MediaType (Thick 3)>> setpagedevice"
            ;;
    	Transparency )
            $ECHO "<</MediaType (Transparency)>> setpagedevice"
            ;;
        Envelope )
        	$ECHO "<</MediaType (Envelope)>> setpagedevice"
        	;;
        Envelope1 )
            $ECHO "<</MediaType (Envelope 1)>> setpagedevice"
            ;;
        Envelope2 )
        	$ECHO "<</MediaType (Envelope 2)>> setpagedevice"
        	;;
        Envelope3 )
            $ECHO "<</MediaType (Envelope 3)>> setpagedevice"
            ;;
        Envelope4 )
            $ECHO "<</MediaType (Envelope 4)>> setpagedevice"
            ;;
    	esac


		case $paper in
	    A4 )
            $ECHO "<< /DeferredMediaSelection true /PageSize [596 842] /ImagingBBox null >> setpagedevice"
		    ;;

	    LETTER )
            $ECHO "<< /DeferredMediaSelection true /PageSize [613 791] /ImagingBBox null >> setpagedevice"
		    ;;

	    LEGAL )
            $ECHO "<< /DeferredMediaSelection true /PageSize [613 1010] /ImagingBBox null >> setpagedevice"
		    ;;

	    STATEMENT )
            $ECHO "<< /DeferredMediaSelection true /PageSize [397 613] /ImagingBBox null >> setpagedevice"
		    ;;

	    LEDGER )
            $ECHO "<< /DeferredMediaSelection true /PageSize [791 1225] /ImagingBBox null >> setpagedevice"
		    ;;

	    FOLIO )
            $ECHO "<< /DeferredMediaSelection true /PageSize [596 936] /ImagingBBox null >> setpagedevice"
		    ;;

	    A3 )
            $ECHO "<< /DeferredMediaSelection true /PageSize [842 1191] /ImagingBBox null >> setpagedevice"
		    ;;

	    A5 | a5 )
            $ECHO "<< /DeferredMediaSelection true /PageSize [420 596] /ImagingBBox null >> setpagedevice"
		    ;;

	    A6 | a6 )
            $ECHO "<< /DeferredMediaSelection true /PageSize [298 420] /ImagingBBox null >> setpagedevice"
		    ;;

	    B4 )
            $ECHO "<< /DeferredMediaSelection true /PageSize [729 1032] /ImagingBBox null >> setpagedevice"
		    ;;

	    B5 )
            $ECHO "<< /DeferredMediaSelection true /PageSize [516 729] /ImagingBBox null >> setpagedevice"
		    ;;

	    COMPUTER )
            $ECHO "<< /DeferredMediaSelection true /PageSize [729 1010] /ImagingBBox null >> setpagedevice"
		    ;;

	    LEGAL13 )
            $ECHO "<< /DeferredMediaSelection true /PageSize [613 936] /ImagingBBox null >> setpagedevice"
		    ;;

	    SQ85 )
            $ECHO "<< /DeferredMediaSelection true /PageSize [613 613] /ImagingBBox null >> setpagedevice"
		    ;;

	    JPOST )
            $ECHO "<< /DeferredMediaSelection true /PageSize [284 420] /ImagingBBox null >> setpagedevice"
		    ;;

	    JPOSTD )
            $ECHO "<< /DeferredMediaSelection true /PageSize [420 567] /ImagingBBox null >> setpagedevice"
		    ;;

	    8K )
            $ECHO "<< /DeferredMediaSelection true /PageSize [767 1107] /ImagingBBox null >> setpagedevice"
		    ;;

	    16K )
            $ECHO "<< /DeferredMediaSelection true /PageSize [554 767] /ImagingBBox null >> setpagedevice"
		    ;;

		ENV9 )
			$ECHO "<< /DeferredMediaSelection true /PageSize [279 639] /ImagingBBox null >> setpagedevice"
		    ;;
		
		ENV10 )
			$ECHO "<< /DeferredMediaSelection true /PageSize [297 684] /ImagingBBox null >> setpagedevice"
		    ;;
		
		ENVMONARCH )
			$ECHO "<< /DeferredMediaSelection true /PageSize [279 540] /ImagingBBox null >> setpagedevice"
		    ;;
		
		ENVDL )
			$ECHO "<< /DeferredMediaSelection true /PageSize [312 624] /ImagingBBox null >> setpagedevice"
		    ;;
		
		ENVCHO3 )
			$ECHO "<< /DeferredMediaSelection true /PageSize [340 666] /ImagingBBox null >> setpagedevice"
		    ;;
		
		ENVCHO4 )
			$ECHO "<< /DeferredMediaSelection true /PageSize [255 581] /ImagingBBox null >> setpagedevice"
		    ;;
		
		ENVYOU4 )
			$ECHO "<< /DeferredMediaSelection true /PageSize [298 666] /ImagingBBox null >> setpagedevice"
		    ;;
		
		ENVC5 )
			$ECHO "<< /DeferredMediaSelection true /PageSize [459 649] /ImagingBBox null >> setpagedevice"
		    ;;
		
		esac

	else
		
		if [ -n "${pitch}" ]
		then
			$ECHO "@PJL SET LPARM:PCL FONTNUMBER=0"
			$ECHO "@PJL SET LPARM:PCL PITCH=${pitch}"
		fi

		if [ -n "${page_length}" ]
		then
			$ECHO "@PJL SET FORMLINES=${page_length}"
		fi

		$ECHO "@PJL ENTER LANGUAGE=PCL"
		$ECHO "\033&k2G\c"


        if [ "${trans_mtype}" = "Transparency" ]
        then
            mtype="Transparency"
        fi

    	case $paper in

	    A4 )
		    $ECHO "\033&l26A\c"
		    ;;

    	LETTER )
		    $ECHO "\033&l2A\c"
		    ;;

	    LEGAL )
		    $ECHO "\033&l3A\c"
		    ;;

	    STATEMENT )
		    $ECHO "\033&l15A\c"
		    ;;

	    LEDGER )
		    $ECHO "\033&l6A\c"
		    ;;

	    FOLIO )
		    $ECHO "\033&l9A\c"
		    ;;

	    A3 )
		    $ECHO "\033&l27A\c"
		    ;;

	    A5 )
		    $ECHO "\033&l25A\c"
		    ;;

	    A6 )
		    $ECHO "\033&l24A\c"
		    ;;

	    B4 )
		    $ECHO "\033&l46A\c"
		    ;;

	    B5 )
		    $ECHO "\033&l45A\c"
		    ;;

	    COMPUTER )
		    $ECHO "\033&l501A\c"
		    ;;

	    LEGAL13 )
		    $ECHO "\033&l10A\c"
		    ;;

	    SQ85 )
		    $ECHO "\033&l502A\c"
		    ;;

	    JPOST )
		    $ECHO "\033&l71A\c"
		    ;;

	    JPOSTD )
		    $ECHO "\033&l72A\c"
		    ;;

	    8K )
		    $ECHO "\033&l19A\c"
		    ;;

	    16K )
		    $ECHO "\033&l17A\c"
		    ;;
	    ENV9 )
		    $ECHO "\033&l527A\c"
		    ;;
		    
	    ENV10 )
		    $ECHO "\033&l81A\c"
		    ;;
		    
	    ENVMONARCH )
		    $ECHO "\033&l80A\c"
		    ;;
		    
	    ENVDL )
		    $ECHO "\033&l90A\c"
		    ;;
		    
	    ENVCHO3 )
		    $ECHO "\033&l519A\c"
		    ;;
		    
	    ENVCHO4 )
		    $ECHO "\033&l528A\c"
		    ;;
		    
	    ENVYOU4 )
		    $ECHO "\033&l518A\c"
		    ;;
		    
	    ENVC5 )
		    $ECHO "\033&l91A\c"
		    ;;

	    esac


		case $wrap in
		yes )
			$ECHO "\033&s0C\c"
			;;
		no )
			$ECHO "\033&s1C\c"
			;;
		esac

		pcl_source "${mtype}" "${source}"

		if [ -n "${lm}" ]
		then
			$ECHO "\033&a${lm}L\c"
		fi

		if [ -n "${rm}" ]
		then
			$ECHO "\033&a${rm}M\c"
		fi

		if [ -n "${tm}" ]
		then
			$ECHO "\033&l${tm}E\c"
		fi

		if [ -n "${tl}" ]
		then
			$ECHO "\033&l${tl}F\c"
		fi
	fi
}


cfile=""	# control file
fno=1		# file number that we are printing
fnamelist=""
title=""
if [ "${lang}" = "RAW" ]
then
	printfile=${files}
else
	####
	# set title to "Standard Input" if there is no arg_title
	####
	if [ -n "${arg_title}" ]
	then
		title=${arg_title}
	else
		title="Standard Input"
	fi

	$ECHO "\033%-12345X\c" > ${tmpfile}
	####
	# send out the banner first if required
	####
	if [ "$banner" = "first" ]
	then
		add_banner >> ${tmpfile}
	fi

	####
	# send out the defaults if required
	####
	if [ -n "${send_defaults}" -a "${send_defaults}" = "1" ]
	then
		add_defaults >> ${tmpfile}
	fi

	####
	# now loop through the files to be printed
	####
	for file in ${files}
	do
		if [ -r "${file}" ]
		then
			# set the control file first time through
			if [ -z "$cfile" ]
			then
				dfile=`basename ${file}`
				ddir=`dirname ${file}`
				cfile="${ddir}/`$ECHO "${dfile}" | sed 's/^d/c/'`"
				fnamelist="`grep '^N' ${cfile} | sed 's/^N//'`"
			fi
			#
			# use filename or arg_title if there is no filename,
			# or "Standard Input" if no arg_title
			#

			if [ -n "${arg_title}" ]
			then
				title=${arg_title}
			elif [ -n "${file}" -a "${file}" != " " ]
			then
				title=${file}
			else
				title="Standard Input"
			fi

			add_options >> ${tmpfile}
			cat ${file} >> ${tmpfile}
			$ECHO "\033%-12345X@PJL EOJ" >> ${tmpfile}
		else

			#####
			#
			# Don't complain about not being able to read
			# a file on second and subsequent copies, unless
			# we've not complained yet. This removes repeated
			# messages about the same file yet reduces the
			# chance that the user can remove a file and not
			# know that we had trouble finding it.
			#####

			if [ "${i}" -le 1 -o -z "${badfileyet}" ]
			then
				errmsg WARNING ${E_IP_BADFILE} \
					"cannot read file \"${file}\"" \
					"see if the file still exists and is readable,
			or consult your system administrator;
			printing continues"
				badfileyet=yes
			fi
		fi
	# for file in ${files}
	done
	####
	# send out the banner last if required
	####
	if [ "$banner" = "last" ]
	then
		add_banner >> ${tmpfile}
	fi

	$ECHO "\033%-12345X\c" >> ${tmpfile}

	printfile=${tmpfile}

# if ${lang}="RAW"
fi

	logger -p lpr.debug -t "net_estbw: ${request_id}" "printfile : ${printfile}"

	#####
	# Print the file
	#####
for outfile in ${printfile}
do
	if [ -r "${outfile}" ]
	then
		if [ -n "${NO_OUTPUT}" ]
		then
			(
				$ECHO ${LPDSEND} ${outfile} >> $TEMPLOG
				$ECHO $? > ${LPTMPDIR}/pr_eexit_code
			) | ${LPTELL} ${LPTELL_OPTS} ${printer}
		else
			(
				eval ${LPDSEND} ${outfile} 2>&1
				$ECHO $? > ${LPTMPDIR}/pr_eexit_code
			) | ${LPTELL} ${LPTELL_OPTS} ${printer}
		fi


		exit_code=`cat ${LPTMPDIR}/pr_eexit_code`
		logger -p lpr.debug -t "net_estbw: ${request_id}" \
			"netpr exit_code : ${exit_code}"

		if [ -z "${SAVETEMP}" -a -f "${tmpfile}" ]
		then
			/bin/rm "${tmpfile}"
		fi

		if [ -n "${exit_code}" ]
		then
			if [ "${exit_code}" -eq 0 ]
			then
				printone=yes
			else
				if [ "${exit_code}" -lt 128 ]
				then
					noprint=yes
				else
					retry=yes
				fi
			fi
		fi

	else

		errmsg WARNING ${E_IP_BADFILE} \
		"cannot read temporary file \"${file}\""\
			"see if file still exists,
		or consult your system administrator;
		printing continues"

	fi
# for outfile in ${printfile}
done


if [ -n "${printone}" -a -z "${retry}" -a -z "${noprint}" ]
then
	exit_code=`expr 0`
else
	if [ -n "${retry}" -a -z "${printone}" -a -z "${noprint}" ]
	then
		exit_code=`expr 129`	# means that lpsched should try again later
	else
		exit_code=`expr 1`	# don't try to print this job again
	fi
fi

logger -p lpr.debug -t "net_estbw: ${request_id}" \
	"FINAL exit_code : ${exit_code}"

exit_clean ${exit_code}
